from django.views import View
from .libs.captcha.captcha import captcha
from django.core.cache import cache
from . import constants
from django.http import HttpResponse, JsonResponse
from utils.response_code import RETCODE
from django.http import JsonResponse

import random


import logging
# 日志记录器
logger = logging.getLogger('django')

class ImageCodeView(View):
    """
    图形验证码视图 - 生成并返回图形验证码
    将验证码文本存储在Django缓存中，以UUID为键
    
    URL: /verifications/image_codes/<uuid>/
    """
    def get(self, request, uuid):
        """
        处理GET请求，生成图形验证码
        
        Args:
            request: HttpRequest对象
            uuid: 客户端生成的唯一标识
            
        Returns:
            HttpResponse: 图片二进制数据
        """
        text, image = captcha.generate_captcha()                             # 生成图形验证码
        cache_key = 'img_%s' % uuid
        cache.set(cache_key, text, constants.IMAGE_CODE_REDIS_EXPIRES)       # 保存图形验证码到缓存
        return HttpResponse(image, content_type='image/jpg')                 # 响应图形验证码


class ImageCodeCheckView(View):
    """
    图形验证码校验视图 - 验证用户输入的验证码是否正确
    从缓存中获取正确的验证码进行比对
    
    URL: /verifications/image_codes/check/<uuid>/
    """
    def get(self, request, uuid):
        """
        处理GET请求，校验图形验证码
        
        Args:
            request: HttpRequest对象
            uuid: 客户端生成的唯一标识
            
        Returns:
            JsonResponse: 验证结果的JSON响应
        """
        # 获取用户输入的验证码
        user_code = request.GET.get('image_code')
        # 从缓存获取正确的验证码
        cache_key = 'img_%s' % uuid
        correct_code = cache.get(cache_key)
        print(f"输入的验证码为：{user_code}   实际验证码为：{correct_code}")

        # 比较验证码（不区分大小写）
        if user_code and correct_code and user_code.lower() == correct_code.lower():
            return JsonResponse({'is_valid': True})
        else:
            return JsonResponse({'is_valid': False})
